package tur.br.moradadosol.dao.implementacao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import tur.br.moradadosol.dao.PesquisaDAO;
import tur.br.moradadosol.model.Pesquisa;
import tur.br.moradadosol.util.Conf;
import tur.br.moradadosol.util.Util;

public class SQLPesquisaDAO implements PesquisaDAO {
	
	private Connection connection;
	
	public SQLPesquisaDAO(Connection conn) {
		connection = conn;
	}

	public void novoRegistro(String key) throws Exception {
		PreparedStatement pstm = null;
		
		try {
		
			String sql = "insert into " + Conf.getProp("TABLE_PESQUISA") 
			+ " (CD_PESQUISA, chave, DT_ENVIO) " 
			+ " VALUES(null, ?, sysdate()) ";
			//passando null na pk pq é auto-incremento
			
			pstm = connection.prepareStatement(sql);
			
			pstm.setString(1, key);
			
			pstm.executeUpdate();
		} catch (SQLException e) {
			throw e;
		} finally {
			pstm.close();
		}
		
	}

	public void responder(Pesquisa pesquisa) throws Exception {
		StringBuffer sql = new StringBuffer("Update ");
		sql.append(Conf.getProp("TABLE_PESQUISA"));
		sql.append(" SET DT_RESPOSTA= curdate(), ATENDIMENTO_INICIAL=?, "); 
		sql.append("ATENDIMENTO_RECEPCAO=?, LIMPEZA_APARTAMENTO=?, ");
		sql.append("ACOMODACOES=?, INFORMACOES_RECEBIDAS=?, ");
		sql.append("INFORMACOES_SITE=?, AVALIACAO_GERAL=?, OPINIAO=? ");
		sql.append("WHERE chave=? AND DT_RESPOSTA is null ");
		//DT_RESPOSTA is null -> para garantir que não vai sobrescrever nenhuma resposta
		
		int i = 1;
		
		PreparedStatement pstm = null;
		
		try {
			pstm = connection.prepareStatement(sql.toString());
			
			pstm.setInt(i++, pesquisa.getInicial());
			pstm.setInt(i++, pesquisa.getRecepcao());
			pstm.setInt(i++, pesquisa.getLimpezaApart());
			pstm.setInt(i++, pesquisa.getAcomodacoes());
			pstm.setInt(i++, pesquisa.getInformLocal());
			pstm.setInt(i++, pesquisa.getInformSite());
			pstm.setInt(i++, pesquisa.getGeral());
			pstm.setString(i++, pesquisa.getComentarios());
			
			//where
			pstm.setString(i++, pesquisa.getKey());
			
			pstm.executeUpdate();
		} catch (SQLException e) {
			throw e;
		} finally {
			pstm.close();
		}
	}

	/**
	 * Buscar um registro de pesquisa pela chave gerada.
	 */
	public Pesquisa buscar(String key) throws Exception {
		StringBuffer sql = new StringBuffer("Select * FROM ");
		sql.append(Conf.getProp("TABLE_PESQUISA"));
		sql.append(" where chave = ? ");
		
		Pesquisa p = null;
		
		PreparedStatement pstm = null;
		
		ResultSet rs = null;
		
		try {
			pstm = connection.prepareStatement(sql.toString());
			
			pstm.setString(1, key);
			
			rs = pstm.executeQuery();
			
			if(rs.next()) {
				p = new Pesquisa();
				
				p.setKey(key);
				p.setDataEnvio(Util.getDataCalendar(rs.getDate("dt_envio")));
				p.setDataResposta(Util.getDataCalendar(rs.getDate("dt_resposta")));
				p.setInicial(rs.getInt("atendimento_inicial"));
				p.setRecepcao(rs.getInt("atendimento_recepcao"));
				p.setLimpezaApart(rs.getInt("limpeza_apartamento"));
				p.setAcomodacoes(rs.getInt("acomodacoes"));
				p.setInformLocal(rs.getInt("informacoes_recebidas"));
				p.setInformSite(rs.getInt("informacoes_site"));
				p.setGeral(rs.getInt("avaliacao_geral"));
				p.setComentarios(rs.getString("opiniao"));
			}
		
		} catch (Exception e) {
			throw e;
		} finally {
			rs.close();
			pstm.close();
		}
		return p;
	}

}
